Android数据库ORM框架用法、源码和性能比较分析

基本用法

LitePal

LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,LitePal很“轻”,jar包只有100k不到,使用起来也比较简单,源码地址为Github地址

首先需要引入lib,可以通过gradle引入也可以将下载的litepal.jar包直接放入libs目录下。然后需要在assets目录下新建一个litepal.xml文件,文件名称不能随意更改,代码如下:

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="demo" ></dbname>  

    <version value="1" ></version>  

    <list>  
        <mapping class="com.example.databasetest.model.News"></mapping>  
    </list>  
</litepal> 

用于设定数据库的名字,用于设定数据库的版本号,用于设定所有的映射模型,用于存放具体的Model类,必须是完整的类名。

然后还需要配置LitePalApplication,由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了。如果需要自定义application文件,只需继承LitePalApplication即可。

接下来需要创建Model类

public class News extends DataSupport {
     
    private int id;       
    private String title;      
    private String content;        
    private Date publishDate;        
    private int commentCount;        
    // 自动生成get、set方法  
    ...  
}  

继承了DataSupport类之后,这些实体类就拥有了进行CRUD操作的能力

News news = new News();  
news.setTitle("这是一条新闻标题");  
news.setContent("这是一条新闻内容");  
news.setPublishDate(new Date());  
news.save(); 

List<News> newsList = DataSupport.select("title", "content")  
        .where("commentcount > ?", "0")  
        .order("publishdate desc").find(News.class);  

LitePal还提供了直接用sql原句实现查询的api方法,扩展性也比较好。

AFinal

AFinal是一个Android的orm、ioc快速开发框架,里面包含了四大功能:控件的id绑定和事件绑定功能;网络图片的显示功能(里面包含了强大的缓存框架);数据库sqlite的操作功能;http数据的读取功能(支持ajax方式读取),可从Github AFinal获取源码。数据库FinalDb是其中的一个组件,使用比较简单。

首先需要创建model类,承担对象与数据库表的映射功能。

@Table(name="table_user")
public class User {
   
    @id
    private int id;
    private String name;
    private String email;
    private Date birth;

    // getter and setter不能省略
    ...
}

声明@Table注解,表示表名称为table_user;@id表示id作为该表自动增长的主键,接下来就可以直接使用了。

FinalDb db = FinalDb.create(this, "afinal_db");
User user = new User();
user.setEmail("[email protected]");
user.setName("探索者");
user.setBirth(new Date());
db.save(user);
String name = "探索者";
List<User> userList = db.findAllByWhere(User.class, "name="' + name + "'" );//查询用户名为探索者的用户
if(userList.size() > 0){
    User other = userList.get(0);
    other.setEmail("customer@youzan.com");
    db.update(other);
}

以上就是AFinal中关于数据库的简单用法,不需要额外的配置,api接口也比较简单易用。

greenDAO

greenDAO与上述两种ORM框架不同,其原理不是根据反射进行数据库的各项操作,而是一开始就人工生成业务需要的Model和DAO文件,业务中可以直接调用相应的DAO文件进行数据库操作,从而避免了因反射带来的性能损耗和效率低下。但是由于需要人工生成model和DAO文件,所以greenDAO的配置就略显复杂。

首先需要新建一个java工程来生成DAO类文件,该工程需要导入greendao-generator.jar和freemarker.jar文件到项目中,github官方源码中已经提供了该工程。

public class ExampleDaoGenerator
{
   

    public static void main(String[] args) throws Exception
    {
        Schema schema = new Schema(3, "de.greenrobot.daoexample");

        addNote(schema);
        addCustomerOrder(schema);

        new DaoGenerator().generateAll(schema, "../DaoExample/src-gen");
    }

   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值